#include <stdio.h>
#include <unistd.h>
//调用wait函数用到的头文件
#include <sys/wait.h>
#include <stdlib.h>

int main()
{
    pid_t pid = fork();
    if(pid < 0)
    {
        perror("fork");
        return 0;
    }
    else if(pid == 0)
    {
        //child
        int count = 20;
        sleep(1);
        int* lp = NULL;
        *lp = 10;
        while(1)
        {
            //if(count <= 0)
            //{
            //    break;
            //}
            printf("i am child pid=[%d], ppid=[%d]\n", getpid(), getppid());
            count--;
            sleep(1);
        }

        exit(10);
    }
    else
    {
        //father
        //pid > 0
        printf("begin ---> i am father pid=[%d], ppid=[%d]\n", getpid(), getppid());

        int status;
        wait(&status);
        //printf("exit_code : %d\n", (status >> 8) & 0xFF);
        printf("sig_code : %d\n", status & 0x7F);
        printf("coredump_code : %d\n", (status >> 7) & 0x1);

        //关注 父进程是否一开始就能进去到这个逻辑当中
        //判断的依据：一开始，是否在大量的输出“i am father”
        //    大量的输出：进入到下面的逻辑
        //    只输出一次：则没有进入到下面的逻辑
        while(1)
        {
            printf("i am father pid=[%d], ppid=[%d]\n", getpid(), getppid());
            sleep(1);
        }
    }
    return 0;
}
